home *** CD-ROM | disk | FTP | other *** search
/ Enter 2004 January / enter-2004-01.iso / files / maxima-5.9.0.exe / {app} / share / maxima / 5.9.0 / src / numerical / slatec / zuni2.lisp < prev    next >
Encoding:
Text File  |  2003-02-09  |  13.5 KB  |  331 lines

  1. ;;; Compiled by f2cl version 2.0 beta 2002-05-06
  2. ;;; 
  3. ;;; Options: ((:prune-labels nil) (:auto-save t) (:relaxed-array-decls t)
  4. ;;;           (:coerce-assigns :as-needed) (:array-type ':simple-array)
  5. ;;;           (:array-slicing nil) (:declare-common nil)
  6. ;;;           (:float-format double-float))
  7.  
  8. (in-package "SLATEC")
  9.  
  10.  
  11. (let ((zeror 0.0)
  12.       (zeroi 0.0)
  13.       (coner 1.0)
  14.       (cipr (make-array 4 :element-type 'double-float))
  15.       (cipi (make-array 4 :element-type 'double-float))
  16.       (hpi 1.5707963267948966)
  17.       (aic 1.2655121234846454))
  18.   (declare (type (simple-array double-float (4)) cipi cipr)
  19.            (type double-float aic hpi coner zeroi zeror))
  20.   (f2cl-lib:fset (f2cl-lib:fref cipr (1) ((1 4))) 1.0)
  21.   (f2cl-lib:fset (f2cl-lib:fref cipi (1) ((1 4))) 0.0)
  22.   (f2cl-lib:fset (f2cl-lib:fref cipr (2) ((1 4))) 0.0)
  23.   (f2cl-lib:fset (f2cl-lib:fref cipi (2) ((1 4))) 1.0)
  24.   (f2cl-lib:fset (f2cl-lib:fref cipr (3) ((1 4))) -1.0)
  25.   (f2cl-lib:fset (f2cl-lib:fref cipi (3) ((1 4))) 0.0)
  26.   (f2cl-lib:fset (f2cl-lib:fref cipr (4) ((1 4))) 0.0)
  27.   (f2cl-lib:fset (f2cl-lib:fref cipi (4) ((1 4))) -1.0)
  28.   (defun zuni2 (zr zi fnu kode n yr yi nz nlast fnul tol elim alim)
  29.     (declare (type (simple-array double-float (*)) yr yi)
  30.              (type f2cl-lib:integer4 kode n nz nlast)
  31.              (type double-float zr zi fnu fnul tol elim alim))
  32.     (prog ((bry (make-array 3 :element-type 'double-float))
  33.            (cssr (make-array 3 :element-type 'double-float))
  34.            (csrr (make-array 3 :element-type 'double-float))
  35.            (cyr (make-array 2 :element-type 'double-float))
  36.            (cyi (make-array 2 :element-type 'double-float)) (i 0) (iflag 0)
  37.            (in 0) (inu 0) (j 0) (k 0) (nai 0) (nd 0) (ndai 0) (nn 0) (nuf 0)
  38.            (nw 0) (idum 0) (aarg 0.0) (aii 0.0) (air 0.0) (ang 0.0) (aphi 0.0)
  39.            (argi 0.0) (argr 0.0) (ascle 0.0) (asumi 0.0) (asumr 0.0)
  40.            (bsumi 0.0) (bsumr 0.0) (cidi 0.0) (crsc 0.0) (cscl 0.0) (c1r 0.0)
  41.            (c2i 0.0) (c2m 0.0) (c2r 0.0) (daii 0.0) (dair 0.0) (fn 0.0)
  42.            (phii 0.0) (phir 0.0) (rast 0.0) (raz 0.0) (rs1 0.0) (rzi 0.0)
  43.            (rzr 0.0) (sti 0.0) (str 0.0) (s1i 0.0) (s1r 0.0) (s2i 0.0)
  44.            (s2r 0.0) (zbi 0.0) (zbr 0.0) (zeta1i 0.0) (zeta1r 0.0) (zeta2i 0.0)
  45.            (zeta2r 0.0) (zni 0.0) (znr 0.0) (car 0.0) (sar 0.0))
  46.       (declare (type (simple-array double-float (2)) cyi cyr)
  47.                (type (simple-array double-float (3)) cssr csrr bry)
  48.                (type double-float sar car znr zni zeta2r zeta2i zeta1r zeta1i
  49.                 zbr zbi s2r s2i s1r s1i str sti rzr rzi rs1 raz rast phir phii
  50.                 fn dair daii c2r c2m c2i c1r cscl crsc cidi bsumr bsumi asumr
  51.                 asumi ascle argr argi aphi ang air aii aarg)
  52.                (type f2cl-lib:integer4 idum nw nuf nn ndai nd nai k j inu in
  53.                 iflag i))
  54.       (setf nz 0)
  55.       (setf nd n)
  56.       (setf nlast 0)
  57.       (setf cscl (/ 1.0 tol))
  58.       (setf crsc tol)
  59.       (f2cl-lib:fset (f2cl-lib:fref cssr (1) ((1 3))) cscl)
  60.       (f2cl-lib:fset (f2cl-lib:fref cssr (2) ((1 3))) coner)
  61.       (f2cl-lib:fset (f2cl-lib:fref cssr (3) ((1 3))) crsc)
  62.       (f2cl-lib:fset (f2cl-lib:fref csrr (1) ((1 3))) crsc)
  63.       (f2cl-lib:fset (f2cl-lib:fref csrr (2) ((1 3))) coner)
  64.       (f2cl-lib:fset (f2cl-lib:fref csrr (3) ((1 3))) cscl)
  65.       (f2cl-lib:fset (f2cl-lib:fref bry (1) ((1 3)))
  66.                      (/ (* 1000.0 (f2cl-lib:d1mach 1)) tol))
  67.       (setf znr zi)
  68.       (setf zni (- zr))
  69.       (setf zbr zr)
  70.       (setf zbi zi)
  71.       (setf cidi (- coner))
  72.       (setf inu (f2cl-lib:int fnu))
  73.       (setf ang (* hpi (- fnu inu)))
  74.       (setf c2r (cos ang))
  75.       (setf c2i (sin ang))
  76.       (setf car c2r)
  77.       (setf sar c2i)
  78.       (setf in (f2cl-lib:int-sub (f2cl-lib:int-add inu n) 1))
  79.       (setf in (f2cl-lib:int-add (mod in 4) 1))
  80.       (setf str
  81.               (- (* c2r (f2cl-lib:fref cipr (in) ((1 4))))
  82.                  (* c2i (f2cl-lib:fref cipi (in) ((1 4))))))
  83.       (setf c2i
  84.               (+ (* c2r (f2cl-lib:fref cipi (in) ((1 4))))
  85.                  (* c2i (f2cl-lib:fref cipr (in) ((1 4))))))
  86.       (setf c2r str)
  87.       (if (> zi 0.0) (go label10))
  88.       (setf znr (- znr))
  89.       (setf zbi (- zbi))
  90.       (setf cidi (- cidi))
  91.       (setf c2i (- c2i))
  92.      label10
  93.       (setf fn (max fnu 1.0))
  94.       (multiple-value-bind
  95.           (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 var-9 var-10
  96.            var-11 var-12 var-13 var-14 var-15 var-16)
  97.           (zunhj znr zni fn 1 tol phir phii argr argi zeta1r zeta1i zeta2r
  98.            zeta2i asumr asumi bsumr bsumi)
  99.         (declare (ignore var-0 var-1 var-2 var-3 var-4))
  100.         (setf phir var-5)
  101.         (setf phii var-6)
  102.         (setf argr var-7)
  103.         (setf argi var-8)
  104.         (setf zeta1r var-9)
  105.         (setf zeta1i var-10)
  106.         (setf zeta2r var-11)
  107.         (setf zeta2i var-12)
  108.         (setf asumr var-13)
  109.         (setf asumi var-14)
  110.         (setf bsumr var-15)
  111.         (setf bsumi var-16))
  112.       (if (= kode 1) (go label20))
  113.       (setf str (+ zbr zeta2r))
  114.       (setf sti (+ zbi zeta2i))
  115.       (setf rast (/ fn (zabs str sti)))
  116.       (setf str (* str rast rast))
  117.       (setf sti (* (- sti) rast rast))
  118.       (setf s1r (- str zeta1r))
  119.       (setf s1i (- sti zeta1i))
  120.       (go label30)
  121.      label20
  122.       (setf s1r (- zeta2r zeta1r))
  123.       (setf s1i (- zeta2i zeta1i))
  124.      label30
  125.       (setf rs1 s1r)
  126.       (if (> (abs rs1) elim) (go label150))
  127.      label40
  128.       (setf nn (min (the f2cl-lib:integer4 2) (the f2cl-lib:integer4 nd)))
  129.       (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1))
  130.                     ((> i nn) nil)
  131.         (tagbody
  132.           (setf fn (+ fnu (f2cl-lib:int-sub nd i)))
  133.           (multiple-value-bind
  134.               (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 var-9
  135.                var-10 var-11 var-12 var-13 var-14 var-15 var-16)
  136.               (zunhj znr zni fn 0 tol phir phii argr argi zeta1r zeta1i zeta2r
  137.                zeta2i asumr asumi bsumr bsumi)
  138.             (declare (ignore var-0 var-1 var-2 var-3 var-4))
  139.             (setf phir var-5)
  140.             (setf phii var-6)
  141.             (setf argr var-7)
  142.             (setf argi var-8)
  143.             (setf zeta1r var-9)
  144.             (setf zeta1i var-10)
  145.             (setf zeta2r var-11)
  146.             (setf zeta2i var-12)
  147.             (setf asumr var-13)
  148.             (setf asumi var-14)
  149.             (setf bsumr var-15)
  150.             (setf bsumi var-16))
  151.           (if (= kode 1) (go label50))
  152.           (setf str (+ zbr zeta2r))
  153.           (setf sti (+ zbi zeta2i))
  154.           (setf rast (/ fn (zabs str sti)))
  155.           (setf str (* str rast rast))
  156.           (setf sti (* (- sti) rast rast))
  157.           (setf s1r (- str zeta1r))
  158.           (setf s1i (+ (- sti zeta1i) (abs zi)))
  159.           (go label60)
  160.          label50
  161.           (setf s1r (- zeta2r zeta1r))
  162.           (setf s1i (- zeta2i zeta1i))
  163.          label60
  164.           (setf rs1 s1r)
  165.           (if (> (abs rs1) elim) (go label120))
  166.           (if (= i 1) (setf iflag 2))
  167.           (if (< (abs rs1) alim) (go label70))
  168.           (setf aphi (zabs phir phii))
  169.           (setf aarg (zabs argr argi))
  170.           (setf rs1
  171.                   (- (+ rs1 (f2cl-lib:flog aphi))
  172.                      (* 0.25 (f2cl-lib:flog aarg))
  173.                      aic))
  174.           (if (> (abs rs1) elim) (go label120))
  175.           (if (= i 1) (setf iflag 1))
  176.           (if (< rs1 0.0) (go label70))
  177.           (if (= i 1) (setf iflag 3))
  178.          label70
  179.           (multiple-value-bind
  180.               (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7)
  181.               (zairy argr argi 0 2 air aii nai idum)
  182.             (declare (ignore var-0 var-1 var-2 var-3))
  183.             (setf air var-4)
  184.             (setf aii var-5)
  185.             (setf nai var-6)
  186.             (setf idum var-7))
  187.           (multiple-value-bind
  188.               (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7)
  189.               (zairy argr argi 1 2 dair daii ndai idum)
  190.             (declare (ignore var-0 var-1 var-2 var-3))
  191.             (setf dair var-4)
  192.             (setf daii var-5)
  193.             (setf ndai var-6)
  194.             (setf idum var-7))
  195.           (setf str (- (* dair bsumr) (* daii bsumi)))
  196.           (setf sti (+ (* dair bsumi) (* daii bsumr)))
  197.           (setf str (+ str (- (* air asumr) (* aii asumi))))
  198.           (setf sti (+ sti (+ (* air asumi) (* aii asumr))))
  199.           (setf s2r (- (* phir str) (* phii sti)))
  200.           (setf s2i (+ (* phir sti) (* phii str)))
  201.           (setf str (* (exp s1r) (f2cl-lib:fref cssr (iflag) ((1 3)))))
  202.           (setf s1r (* str (cos s1i)))
  203.           (setf s1i (* str (sin s1i)))
  204.           (setf str (- (* s2r s1r) (* s2i s1i)))
  205.           (setf s2i (+ (* s2r s1i) (* s2i s1r)))
  206.           (setf s2r str)
  207.           (if (/= iflag 1) (go label80))
  208.           (multiple-value-bind
  209.               (var-0 var-1 var-2 var-3 var-4)
  210.               (zuchk s2r s2i nw (f2cl-lib:fref bry (1) ((1 3))) tol)
  211.             (declare (ignore var-0 var-1 var-3 var-4))
  212.             (setf nw var-2))
  213.           (if (/= nw 0) (go label120))
  214.          label80
  215.           (if (<= zi 0.0) (setf s2i (- s2i)))
  216.           (setf str (- (* s2r c2r) (* s2i c2i)))
  217.           (setf s2i (+ (* s2r c2i) (* s2i c2r)))
  218.           (setf s2r str)
  219.           (f2cl-lib:fset (f2cl-lib:fref cyr (i) ((1 2))) s2r)
  220.           (f2cl-lib:fset (f2cl-lib:fref cyi (i) ((1 2))) s2i)
  221.           (setf j (f2cl-lib:int-add (f2cl-lib:int-sub nd i) 1))
  222.           (f2cl-lib:fset (f2cl-lib:fref yr (j) ((1 n)))
  223.                          (* s2r (f2cl-lib:fref csrr (iflag) ((1 3)))))
  224.           (f2cl-lib:fset (f2cl-lib:fref yi (j) ((1 n)))
  225.                          (* s2i (f2cl-lib:fref csrr (iflag) ((1 3)))))
  226.           (setf str (* (- c2i) cidi))
  227.           (setf c2i (* c2r cidi))
  228.           (setf c2r str)
  229.          label90))
  230.       (if (<= nd 2) (go label110))
  231.       (setf raz (/ 1.0 (zabs zr zi)))
  232.       (setf str (* zr raz))
  233.       (setf sti (* (- zi) raz))
  234.       (setf rzr (* (+ str str) raz))
  235.       (setf rzi (* (+ sti sti) raz))
  236.       (f2cl-lib:fset (f2cl-lib:fref bry (2) ((1 3)))
  237.                      (/ 1.0 (f2cl-lib:fref bry (1) ((1 3)))))
  238.       (f2cl-lib:fset (f2cl-lib:fref bry (3) ((1 3))) (f2cl-lib:d1mach 2))
  239.       (setf s1r (f2cl-lib:fref cyr (1) ((1 2))))
  240.       (setf s1i (f2cl-lib:fref cyi (1) ((1 2))))
  241.       (setf s2r (f2cl-lib:fref cyr (2) ((1 2))))
  242.       (setf s2i (f2cl-lib:fref cyi (2) ((1 2))))
  243.       (setf c1r (f2cl-lib:fref csrr (iflag) ((1 3))))
  244.       (setf ascle (f2cl-lib:fref bry (iflag) ((1 3))))
  245.       (setf k (f2cl-lib:int-sub nd 2))
  246.       (setf fn (coerce (the f2cl-lib:integer4 k) 'double-float))
  247.       (f2cl-lib:fdo (i 3 (f2cl-lib:int-add i 1))
  248.                     ((> i nd) nil)
  249.         (tagbody
  250.           (setf c2r s2r)
  251.           (setf c2i s2i)
  252.           (setf s2r (+ s1r (* (+ fnu fn) (- (* rzr c2r) (* rzi c2i)))))
  253.           (setf s2i (+ s1i (* (+ fnu fn) (+ (* rzr c2i) (* rzi c2r)))))
  254.           (setf s1r c2r)
  255.           (setf s1i c2i)
  256.           (setf c2r (* s2r c1r))
  257.           (setf c2i (* s2i c1r))
  258.           (f2cl-lib:fset (f2cl-lib:fref yr (k) ((1 n))) c2r)
  259.           (f2cl-lib:fset (f2cl-lib:fref yi (k) ((1 n))) c2i)
  260.           (setf k (f2cl-lib:int-sub k 1))
  261.           (setf fn (- fn 1.0))
  262.           (if (>= iflag 3) (go label100))
  263.           (setf str (coerce (abs c2r) 'double-float))
  264.           (setf sti (coerce (abs c2i) 'double-float))
  265.           (setf c2m (max str sti))
  266.           (if (<= c2m ascle) (go label100))
  267.           (setf iflag (f2cl-lib:int-add iflag 1))
  268.           (setf ascle (f2cl-lib:fref bry (iflag) ((1 3))))
  269.           (setf s1r (* s1r c1r))
  270.           (setf s1i (* s1i c1r))
  271.           (setf s2r c2r)
  272.           (setf s2i c2i)
  273.           (setf s1r (* s1r (f2cl-lib:fref cssr (iflag) ((1 3)))))
  274.           (setf s1i (* s1i (f2cl-lib:fref cssr (iflag) ((1 3)))))
  275.           (setf s2r (* s2r (f2cl-lib:fref cssr (iflag) ((1 3)))))
  276.           (setf s2i (* s2i (f2cl-lib:fref cssr (iflag) ((1 3)))))
  277.           (setf c1r (f2cl-lib:fref csrr (iflag) ((1 3))))
  278.          label100))
  279.      label110
  280.       (go end_label)
  281.      label120
  282.       (if (> rs1 0.0) (go label140))
  283.       (f2cl-lib:fset (f2cl-lib:fref yr (nd) ((1 n))) zeror)
  284.       (f2cl-lib:fset (f2cl-lib:fref yi (nd) ((1 n))) zeroi)
  285.       (setf nz (f2cl-lib:int-add nz 1))
  286.       (setf nd (f2cl-lib:int-sub nd 1))
  287.       (if (= nd 0) (go label110))
  288.       (multiple-value-bind
  289.           (var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-8 var-9 var-10
  290.            var-11)
  291.           (zuoik zr zi fnu kode 1 nd yr yi nuf tol elim alim)
  292.         (declare
  293.          (ignore var-0 var-1 var-2 var-3 var-4 var-5 var-6 var-7 var-9 var-10
  294.           var-11))
  295.         (setf nuf var-8))
  296.       (if (< nuf 0) (go label140))
  297.       (setf nd (f2cl-lib:int-sub nd nuf))
  298.       (setf nz (f2cl-lib:int-add nz nuf))
  299.       (if (= nd 0) (go label110))
  300.       (setf fn (+ fnu (f2cl-lib:int-sub nd 1)))
  301.       (if (< fn fnul) (go label130))
  302.       (setf in (f2cl-lib:int-sub (f2cl-lib:int-add inu nd) 1))
  303.       (setf in (f2cl-lib:int-add (mod in 4) 1))
  304.       (setf c2r
  305.               (- (* car (f2cl-lib:fref cipr (in) ((1 4))))
  306.                  (* sar (f2cl-lib:fref cipi (in) ((1 4))))))
  307.       (setf c2i
  308.               (+ (* car (f2cl-lib:fref cipi (in) ((1 4))))
  309.                  (* sar (f2cl-lib:fref cipr (in) ((1 4))))))
  310.       (if (<= zi 0.0) (setf c2i (- c2i)))
  311.       (go label40)
  312.      label130
  313.       (setf nlast nd)
  314.       (go end_label)
  315.      label140
  316.       (setf nz -1)
  317.       (go end_label)
  318.      label150
  319.       (if (> rs1 0.0) (go label140))
  320.       (setf nz n)
  321.       (f2cl-lib:fdo (i 1 (f2cl-lib:int-add i 1))
  322.                     ((> i n) nil)
  323.         (tagbody
  324.           (f2cl-lib:fset (f2cl-lib:fref yr (i) ((1 n))) zeror)
  325.           (f2cl-lib:fset (f2cl-lib:fref yi (i) ((1 n))) zeroi)
  326.          label160))
  327.       (go end_label)
  328.      end_label
  329.       (return (values nil nil nil nil nil nil nil nz nlast nil nil nil nil)))))
  330.  
  331.